package api;

import java.util.Objects;
import java.util.Random;

/**
 * Java中处理数值类数据，可以用6中基本类型+一些引用类型来表示。
 */
public class MathDemo {
    public static void main(String[] args) {
        double result = 10.0 / 3;
        System.out.println(result);
        // 需求：只保留小数点后2位。解决方案有2种：
        // 1. 格式化输出
        System.out.printf("%.2f\n", result); // %.2f含义是处理浮点数，并且小数点后只输出2位
        // 2. 利用数学函数改变计算结果(乘100去掉小数再除100)
        result = result * 100;
        result = Math.floor(result); // 向下取整
        result = result / 100;
        System.out.println(result);

        // 需求2：再放大100倍
        System.out.println(result * 100);

        // Math数学工具类。该类中包含大量的静态方法和部分静态常量，可以通过类名直接引用。
        System.out.println(Math.PI);

        // 随机数工具类——Random
        Random rd = new Random(); // 先创建随机数生成器对象
        System.out.println("---随机生成3个整数---");
        System.out.println(rd.nextInt(100)); // nextInt产生随机数，100表示范围[0,100)
        System.out.println(rd.nextInt(100));
        System.out.println(rd.nextInt(100));
        // 思考题：怎样才能产生随机3位数？java没有像Python那样，直接接收多个参数，来控制随机数产生的范围，它都是从0-n
        // [100-999]->[100-1000):下限+nextInt(上限-下限)
        System.out.println(100 + rd.nextInt(900));
        System.out.println(100 + rd.nextInt(900));
        System.out.println(100 + rd.nextInt(900));

        // 包装类——每一种基本类型，有唯一一个对应的引用类型，我们称之为包装类
        // 目的：1. 提供大量的成员方法，丰富数据的操作；2. 在多态场景，可以像引用类型一样传参数
        // 1. 文本和数值互转
        String str = "999"; // 可能从界面上输入进来的
        System.out.println(str + 1);
        // 需要转换成数值类型
        int value = Integer.parseInt(str); // Integer包装类
        System.out.println(value + 1);
        // 2. 包装类和基本类型自动转换——自动装箱和自动拆箱
        add(value); // 自动装箱——基本类型转为包装类型
        Integer a = Integer.valueOf(18);
        System.out.println(++a); // 自动拆箱——包装类型转为基本类型
    }

    // 设计一个能接收所有类型数据的方法，可以用Object这个根类来作为参数
    public static void add(Object e) {
        System.out.println(e);
    }
}
